////////////////////////////////////////////////////////////////////////////////

#ifndef _SGAMEOBJECT_H_
#define _SGAMEOBJECT_H_

////////////////////////////////////////////////////////////////////////////////

#ifndef _PHYSICALOBJECT_H_
#include "physicalobject.h"
#endif

////////////////////////////////////////////////////////////////////////////////

class ServerEngine;
class SPlayer;
class SBullet;
class SWall;

////////////////////////////////////////////////////////////////////////////////


/** Base class for different game objects
*
*  @author   Roman Pasechnik
*  @author   Anastasia Karpinska
*  @since    Nov 10th, 2009
*  @updated  Dec 09th, 2009
*/
class SGameObject : public PhysicalObject
{
////////////////////////////////////////////////////////////////////////////////

public:

////////////////////////////////////////////////////////////////////////////////


    /** Constructor */
    SGameObject( int _ID,
                 float _mass,
                 const PE::Shape* _shape,
                 float _resistanceCoeff );


    /** Destructor */
    virtual ~SGameObject();


////////////////////////////////////////////////////////////////////////////////


    /** Returns object's ID */
    int GetID() const;


    /** Equality */
    bool operator==( const SGameObject& _obj ) const;


    /** Setup server engine interface */
    static void SetEngine( ServerEngine& _engine );


////////////////////////////////////////////////////////////////////////////////
//// Collisions
////////////////////////////////////////////////////////////////////////////////


    /** Informs this object about collision with other object */
    virtual void Collision( PhysicalObject& _obj );


    /** Informs this object about collision with bullet */
    virtual void CollideWithBullet( SBullet& _bullet );


    /** Informs this object about collision with player */
    virtual void CollideWithPlayer( SPlayer& _player );


    /** Informs this object about collision with wall */
    virtual void CollideWithWall( SWall& _wall );


////////////////////////////////////////////////////////////////////////////////

protected:

////////////////////////////////////////////////////////////////////////////////


    /** Get interface to engine */
    static ServerEngine& GetEngine();


////////////////////////////////////////////////////////////////////////////////

private:

////////////////////////////////////////////////////////////////////////////////


    /** Object's ID */
    int m_ID;


    /** Shared interface to server engine */
    static ServerEngine* ms_Engine;


////////////////////////////////////////////////////////////////////////////////
};



////////////////////////////////////////////////////////////////////////////////

#endif

////////////////////////////////////////////////////////////////////////////////

